home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / dir / opendir.c < prev    next >
C/C++ Source or Header  |  1992-01-10  |  927b  |  47 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6.  
  7. #if defined(LIBC_SCCS) && !defined(lint)
  8. static char sccsid[] = "@(#)opendir.c    5.2 (Berkeley) 3/9/86";
  9. #endif LIBC_SCCS and not lint
  10.  
  11. #include <stdlib.h>
  12. #include <sys/param.h>
  13. #include <sys/dir.h>
  14. #include <sys/file.h>
  15. #include <sys/stat.h>
  16. #include <errno.h>
  17.  
  18. /*
  19.  * open a directory.
  20.  */
  21. DIR *
  22. opendir(name)
  23.     char *name;
  24. {
  25.     register DIR *dirp;
  26.     register int fd;
  27.     struct stat statBuf;
  28.  
  29.     if (stat(name, &statBuf) == -1) {
  30.         return NULL;
  31.     }
  32.         if (!S_ISDIR(statBuf.st_mode)) {
  33.                 errno = ENOTDIR;
  34.         return NULL;
  35.     }
  36.     if ((fd = open(name, O_RDONLY, 0)) == -1) {
  37.         return NULL;
  38.     }
  39.     if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
  40.         close (fd);
  41.         return NULL;
  42.     }
  43.     dirp->dd_fd = fd;
  44.     dirp->dd_loc = 0;
  45.     return dirp;
  46. }
  47.